namespace ScrumSprintMonitor.UI.Wpf.ViewModels
{
	#region #using Directives

	using System;
	using System.Collections.Generic;
	using System.Collections.ObjectModel;
	using System.ComponentModel;
	using System.Windows.Media;

	using Infrastructure;

	#endregion

	public interface ITeamMemberViewModel : INotifyPropertyChanged
	{
		ITeamMember Model { get; }

		string DisplayName { get; }
		ImageSource AvatarImageSource { get; }

		bool RecentlyUpdated { get; }
		DateTime LastUpdate { set; }

		IEnumerable<IWorkItemAdapter> AssignedWorkItems { get; }
		bool NotAllWorkItemsEstimated { get; }

		Color BackgroundColor { get; }

		#region Done Work

		int DoneWorkItemCount { get; }
		double DoneSprintWork { get; }

		#endregion

		#region Remaining Work

		int RemainingWorkItemCount { get; }

		double RemainingSprintWork { get; }
		double RemainingPotentialSprintHours { get; }
		double RemainingSprintHours { get; }
		bool IncludesFreeBusyInformation { get; }

		double RemainingSprintWorkWithUnassigned { get; }
		double RemainingUnassignedSprintWork { get; }

		#endregion

		#region Pie Chart Data

		ObservableCollection<PieChartValue<int>> BacklogItemsPieChartData { get; }
		ObservableCollection<PieChartValue<double>> WorkloadPieChartData { get; }

		#endregion

		void RefreshRecentlyUpdatedFlag();
	}
}